﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BegEntities;
using Logic;

namespace CsharpMailApplikation
{
    public partial class SendMail : Form
    {
        EmailAddress responseMail = new EmailAddress();

        /// <summary>
        /// Konstruktor som kallas när ett nytt, tomt mail skapas.
        /// </summary>
        public SendMail()
        {
            InitializeComponent();
        }
        /// <summary>
        /// Konstruktor som kallas när ett svarsmail ska skapas.
        /// </summary>
        /// <param name="email"></param>
        public SendMail(Email email)
        {
            InitializeComponent();
            SetupResponse(email);
        }

        /// <summary>
        /// Vid ett svarsmail, kallas denna metod som fyller i mottagare, titel och innehållet i mailet användaren svarar på
        /// </summary>
        /// <param name="email"></param>
        private void SetupResponse(Email email)
        {
            toTxt.Text = email.From.Address;
            responseMail.Address = email.From.Address;
            subjectTxt.Text = "RE: " + email.Subject;
            mailtxt.Text = "\n" + "==== " + email.Date + " ====" + "\n" +
                email.Message;
            toTxt.Focus();
        }

        /// <summary>
        /// Metoden som användas för att skicka ett mail med diverse validering innan mailet skickas.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void sendBtn_Click(object sender, EventArgs e)
        {

            if (toTxt.Text != null || toTxt.Text != "")
            {
                //Det första som händer när användaren trycker på "Skicka"-knappen är att denna metod kontrollerar att användaren skrivit i en riktig mailadress
                string pattern = @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$";

                if (System.Text.RegularExpressions.Regex.IsMatch(toTxt.Text, pattern))
                {
                    string subject = subjectTxt.Text;
                    if (subject == null || subject == "")
                    {
                        //Om ämnesraden är tom fylls den med följande sträng
                        subject = "(Inget ämne)";
                    }

                    Email email = new Email();
                    email.Date = DateTime.Now;
                    email.From = new EmailAddress("Henrik.Larsson@BoIS.org", "Henrik Larsson");
                    email.IsRead = false;
                    email.Message = mailtxt.Text;
                    email.Subject = subject;
                    email.To = new EmailAddress(toTxt.Text, "Anonym");
                    email.MsgBox = BegEntities.MessageBox.Sent;
                    email.ID = System.Guid.NewGuid();

                    MailLogic mailLogic = new MailLogic();
                    if (mailLogic.SendMail(email))
                    {
                        //Här lyckas mailet skickas, en ruta kommer upp på skärmen för att bekräfta för användaren
                        //Och skickaformuläret stängs när denna ruta stängs.
                        System.Windows.Forms.MessageBox.Show("Mail skickat!");
                        this.Close();
                    }
                    else
                    {
                        //Om SendMail-metoden i mailLogic misslyckas
                        System.Windows.Forms.MessageBox.Show("Det gick inte att skicka mailet. Försök igen.");
                    }

                }
                else
                {
                    //Om användaren fyllt i en ogiltig mailadress
                    System.Windows.Forms.MessageBox.Show("Fyll i en giltig mailadress!");
                }
            } else
            {
                //Om användaren inte fyllt i en mottagare
                System.Windows.Forms.MessageBox.Show("Fyll i en mottagare!");
            }
        }

        /// <summary>
        /// När användaren trycker på avbryt-knappen så får användare en bekräftelseruta,
        /// varnar att mailet inte sparas om man stänger rutan.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cancelBtn_Click(object sender, EventArgs e)
        {
                DialogResult dialog = System.Windows.Forms.MessageBox.Show("Är du säker på att du vill avsluta? Du har inte skickat ditt mail.",
                "Du har inte sparat ditt mail.",
                MessageBoxButtons.YesNo,
                MessageBoxIcon.Warning);

                if (dialog == DialogResult.Yes)
                {
                    //Skicka mailet
                    this.Close();
                }
        }
    }
}
